// 取到需要权限判断的路由表
import { permissionRouter, fixedRouter } from '@/router'
import router from '@/router'
import store from '@/store/index';
var addRouFlag = false;
// 获取登录角色role
let role = store.state.role;
// 路由拦截：进入路由前判断是否有token，没有token进入login页面 
router.beforeEach((to, from, next) => {
    let token = localStorage.getItem("token")
    if (to.path === '/login') return next()
    if (!token) return next('/login')
    next()
    if (!addRouFlag) {
        addRouFlag = true
            //根据用户的角色、和需要动态展示的路由，生成符合用户角色的路由
        var getRoutes = baseRoleGetRouters(permissionRouter, role.split(","))
            //将生成好的路由addRoutes
        router.addRoutes(fixedRouter.concat(getRoutes))
            //push之后，会重新进入到beforeEach的钩子里,直接进入第一个if判断
        router.push({ path: to.path })
    }
})


/* 根据用户的角色取到该用户对应的路由
allRoutes是动态路由表,roles是取到的用户角色，数组
*/
function baseRoleGetRouters(allRoutes, roles) {
    let rightRoutes = allRoutes.filter((route, index) => {
        if (hasPermission(route, roles)) {
            if (route.children && route.children.length) {
                route.children = baseRoleGetRouters(route.children, roles)
            }
            return true
        }
        return false
    })
    return rightRoutes
}

function hasPermission(route, roles) {
    if (route.meta && route.meta.roles) {
        return roles.some(role => route.meta.roles.indexOf(role) >= 0)
    } else {
        return true
    }
}